5.2.6 启动一个新的容器(示例)

现在我们对Docker引擎已经有了一个总体认识,也了解了一些历史,下面介绍一下创建新容器的过程。

常用的启动容器的方法就是使用Docker命令行工具。下面的 docker container run 命令会基于 alpine:latest 镜像启动一个新容器。

$ docker container run --name ctr1 -it alpine:latest sh

当使用Docker命令行工具执行如上命令时,Docker客户端会将其转换为合适的API格式,并发送到正确的API端点。

API是在daemon中实现的。这套功能丰富、基于版本的REST API已经成为Docker的标志,并且被行业接受成为事实上的容器API。

一旦daemon接收到创建新容器的命令,它就会向containerd发出调用。daemon已经不再包含任何创建容器的代码了!

daemon使用一种CRUD风格的API,通过gRPC与containerd进行通信。

虽然名叫containerd,但是它并不负责创建容器,而是指挥runc去做。containerd将Docker镜像转换为OCI bundle,并让runc基于此创建一个新的容器。

然后,runc与操作系统内核接口进行通信,基于所有必要的工具(Namespace、CGroup等)来创建容器。容器进程作为runc的子进程启动,启动完毕后,runc将会退出。

现在,容器启动完毕了。整个过程如图5.4所示。

22.png

图5.4 启动新容器的过程

results matching ""

    No results matching ""